﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QLNhaThuoc.BL;
using QLNhaThuoc.DTO;
using QLNhaThuoc.MyClass;

namespace QLNhaThuoc
{
    public partial class Form_PhieuXuat : Form
    {
        public Form_PhieuXuat()
        {
            InitializeComponent();
        }

        public PhieuXuat phieuXuatInfo;
        public PhieuXuatControl phieuXuatCtrl;
        ThuocControl thuocCtrl;
        NhanVienControl nhanVienCtrl;
        public bool isAdding = false;
        public bool isViewing = false;
        private void Form_PhieuXuat_Load(object sender, EventArgs e)
        {
            thuocCtrl = new ThuocControl();
            nhanVienCtrl = new NhanVienControl();

            if (isViewing == true)
            {
                XuatPhieuXuat();
                tbMaPX.ReadOnly = true;
                btSave.Enabled = false;
            }
        }

        private void XuatPhieuXuat()
        {
            dtpNgayXuat.Value = phieuXuatInfo.NgayXuat;
            tbMaPX.Text = phieuXuatInfo.MaPX.ToString();
            tbMaNVXuat.Text = phieuXuatInfo.MaNVXuat;
            NhanVien nvXuat = nhanVienCtrl.LayNhanVienTheoMa(phieuXuatInfo.MaNVXuat);
            tbTenNVXuat.Text = nvXuat.Ho + " " + nvXuat.Ten;
            tbMaNVNhan.Text = phieuXuatInfo.MaNVNhan;
            NhanVien nvNhan = nhanVienCtrl.LayNhanVienTheoMa(phieuXuatInfo.MaNVNhan);
            tbTenNVNhan.Text = nvNhan.Ho + " " + nvNhan.Ten;
            tbLyDo.Text = phieuXuatInfo.LyDo;
            dgvCTPX.AutoGenerateColumns = false;
            dgvCTPX.DataSource = phieuXuatInfo.ctPhieuXuat;
        }

        private void btSave_Click(object sender, EventArgs e)
        {
            if (KiemTraDuLieuNhap() == true)
            {
                PhieuXuat info = new PhieuXuat();
                LayThongTinPhieuXuat(ref info);
                if (isAdding == true)
                {
                    if (phieuXuatCtrl.KiemTraPK(info) == false)
                    {
                        phieuXuatCtrl.ThemPX(info);
                    }
                }

                isAdding = false;
                isViewing = true;
                this.Close();
            }
        }

        private void btCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        Thuoc thuoc;
        private void dgvCTPX_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            switch (dgvCTPX.Columns[e.ColumnIndex].Name)
            {
                case "MaThuoc":
                    if (String.IsNullOrEmpty(e.FormattedValue.ToString()))
                    {
                        dgvCTPX.Rows[e.RowIndex].Cells["MaThuoc"].ErrorText = "Bạn chưa nhập mã thuốc";
                        e.Cancel = true;
                    }
                    else
                    {
                        thuoc = thuocCtrl.LayThuocTheoMa(e.FormattedValue.ToString());
                        if (thuoc == null)
                        {
                            dgvCTPX.Rows[e.RowIndex].ErrorText = "Không tồn tại mã thuốc này";
                            e.Cancel = true;
                        }
                        else
                        {
                            dgvCTPX.Rows[e.RowIndex].Cells["MaThuoc"].Tag = thuoc.MaThuoc;
                        }
                    }
                    break;
                case "SoLuong":
                    if (String.IsNullOrEmpty(e.FormattedValue.ToString()))
                    {
                        dgvCTPX.Rows[e.RowIndex].Cells["SoLuong"].ErrorText = "Bạn chưa nhập số lượng";
                        e.Cancel = true;
                    }
                    else
                    {
                        dgvCTPX.Rows[e.RowIndex].Cells["SoLuong"].Tag = e.FormattedValue;
                    }
                    break;
            }
        }

        private void dgvCTPX_CellValidated(object sender, DataGridViewCellEventArgs e)
        {
            PhieuHelper.ValidateCell(dgvCTPX, e, thuoc);
        }

        private void LayThongTinPhieuXuat(ref PhieuXuat info)
        {
            info.NgayXuat = dtpNgayXuat.Value;
            //info.MaPX = tbMaPX.Text;
            info.MaNVXuat = tbMaNVXuat.Text;
            info.MaNVNhan = tbMaNVNhan.Text;
            info.LyDo = tbLyDo.Text;

            CTPhieuHelper helper = new CTPhieuXuatHelper
                                       {
                                           DataSource = dgvCTPX,
                                           //MaPhieu = int.Parse(tbMaPX.Text)
                                       };
            info.ctPhieuXuat = helper.TaoDanhSachChiTiet();
            info.ThanhTien = helper.ThanhTien;
        }

        private bool KiemTraDuLieuNhap()
        {
            if (tbMaNVXuat.Text == "")
            {
                Utils.ShowError("Bạn chưa nhập mã nhân viên xuất", "Thông báo");
                return false;
            }

            if (tbMaNVNhan.Text == "")
            {
                Utils.ShowError("Bạn chưa nhập mã nhân viên nhận", "Thông báo");
                return false;
            }

            if (tbLyDo.Text == "")
            {
                Utils.ShowError("Bạn chưa nhập lý do", "Thông báo");
                return false;
            }

            if (dgvCTPX.Rows.Count == 1)
            {
                Utils.ShowError("Bạn chưa nhập chi tiết phiếu xuất", "Thông báo");
                return false;
            }

            return true;
        }

        public delegate void formClosed();
        public event formClosed handle_formClosed;
        private void Form_PhieuXuat_FormClosed(object sender, FormClosedEventArgs e)
        {
            handle_formClosed();
        }

        private void tbMaNVXuat_Validating(object sender, CancelEventArgs e)
        {
            PhieuHelper.KiemTraNhanVienTonTai(sender, e, nhanVienCtrl, errorProvider1, tbTenNVXuat);
        }

        private void tbMaNVNhan_Validating(object sender, CancelEventArgs e)
        {
            PhieuHelper.KiemTraNhanVienTonTai(sender, e, nhanVienCtrl, errorProvider1, tbTenNVNhan);
        }
    }
}
